using CodeSaude.Domain.Entities;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity.ModelConfiguration;

namespace CodeSaude.Infrastructure.Data.EntityConfig
{
    public class profissionalMap : EntityTypeConfiguration<Profissional>
    {
        public profissionalMap()
        {
            // Primary Key
            this.HasKey(t => t.ProfissionalId);

            // Properties
            this.Property(t => t.nome_profissional)
                .HasMaxLength(90);

            this.Property(t => t.sexo_profissional)
                .IsFixedLength()
                .HasMaxLength(1);

            this.Property(t => t.cns)
                .HasMaxLength(20);

            this.Property(t => t.crm_profissional)
                .HasMaxLength(20);

            this.Property(t => t.cpf_profissional)
                .HasMaxLength(20);

            this.Property(t => t.cns_profissional)
                .HasMaxLength(20);

            this.Property(t => t.nome_pai_profissional)
                .HasMaxLength(255);

            this.Property(t => t.nome_mae_profissional)
                .HasMaxLength(255);

            this.Property(t => t.est_civil_profissional)
                .HasMaxLength(60);

            this.Property(t => t.naturalidade_profissional)
                .HasMaxLength(255);

            this.Property(t => t.uf_naturalidade_profissional)
                .IsFixedLength()
                .HasMaxLength(2);

            this.Property(t => t.numero_naturalizacao)
                .HasMaxLength(20);

            this.Property(t => t.frequenta_escola)
                .IsFixedLength()
                .HasMaxLength(1);

            this.Property(t => t.aposentado)
                .HasMaxLength(10);

            this.Property(t => t.ocupacao_profissional)
                .HasMaxLength(255);

            this.Property(t => t.rg_profissional)
                .HasMaxLength(20);

            this.Property(t => t.uf_rg)
                .IsFixedLength()
                .HasMaxLength(2);

            this.Property(t => t.nome_cartorio)
                .HasMaxLength(50);

            this.Property(t => t.livro_certidao)
                .HasMaxLength(20);

            this.Property(t => t.folha_certidao)
                .HasMaxLength(20);

            this.Property(t => t.termo_certidao)
                .HasMaxLength(20);

            this.Property(t => t.titulo_profissional)
                .HasMaxLength(20);

            this.Property(t => t.zona_titulo)
                .HasMaxLength(10);

            this.Property(t => t.secao_titulo)
                .HasMaxLength(10);

            this.Property(t => t.email)
                .HasMaxLength(40);

            this.Property(t => t.telefone_profissional)
                .HasMaxLength(20);

            this.Property(t => t.celular)
                .HasMaxLength(20);

            this.Property(t => t.nome_contato)
                .HasMaxLength(40);

            this.Property(t => t.telefone_contato)
                .HasMaxLength(20);

            this.Property(t => t.cep_profissional)
                .HasMaxLength(10);

            this.Property(t => t.rua_profissional)
                .HasMaxLength(255);

            this.Property(t => t.bairro_profissional)
                .HasMaxLength(255);

            this.Property(t => t.cidade_profissional)
                .HasMaxLength(255);

            this.Property(t => t.numero_profissional)
                .HasMaxLength(10);

            this.Property(t => t.complemento_profissional)
                .HasMaxLength(60);

            this.Property(t => t.uf_profissional)
                .IsFixedLength()
                .HasMaxLength(2);

            this.Property(t => t.outro_endereco_profissional)
                .HasMaxLength(255);

            this.Property(t => t.ponto_ref_profissional)
                .HasMaxLength(255);

            // Table & Column Mappings
            this.ToTable("profissional");
            this.Property(t => t.ProfissionalId).HasColumnName("id_profissional");
            this.Property(t => t.id_setor).HasColumnName("id_setor");
            this.Property(t => t.nome_profissional).HasColumnName("nome_profissional");
            this.Property(t => t.sexo_profissional).HasColumnName("sexo_profissional");
            this.Property(t => t.id_situacao).HasColumnName("id_situacao");
            this.Property(t => t.cns).HasColumnName("cns");
            this.Property(t => t.data_criacao).HasColumnName("data_criacao");
            this.Property(t => t.Usuario_criacao).HasColumnName("Usuario_criacao");
            this.Property(t => t.data_alteracao).HasColumnName("data_alteracao");
            this.Property(t => t.Usuario_alteracao).HasColumnName("Usuario_alteracao");
            this.Property(t => t.crm_profissional).HasColumnName("crm_profissional");
            this.Property(t => t.cpf_profissional).HasColumnName("cpf_profissional");
            this.Property(t => t.cns_profissional).HasColumnName("cns_profissional");
            this.Property(t => t.nome_pai_profissional).HasColumnName("nome_pai_profissional");
            this.Property(t => t.nome_mae_profissional).HasColumnName("nome_mae_profissional");
            this.Property(t => t.raca_cor).HasColumnName("raca_cor");
            this.Property(t => t.est_civil_profissional).HasColumnName("est_civil_profissional");
            this.Property(t => t.dt_nasc_profissional).HasColumnName("dt_nasc_profissional");
            this.Property(t => t.naturalidade_profissional).HasColumnName("naturalidade_profissional");
            this.Property(t => t.uf_naturalidade_profissional).HasColumnName("uf_naturalidade_profissional");
            this.Property(t => t.nacionalidade).HasColumnName("nacionalidade");
            this.Property(t => t.pais_origem).HasColumnName("pais_origem");
            this.Property(t => t.dt_data_entrada).HasColumnName("dt_data_entrada");
            this.Property(t => t.dt_data_naturalizacao).HasColumnName("dt_data_naturalizacao");
            this.Property(t => t.numero_naturalizacao).HasColumnName("numero_naturalizacao");
            this.Property(t => t.id_escolaridade).HasColumnName("id_escolaridade");
            this.Property(t => t.frequenta_escola).HasColumnName("frequenta_escola");
            this.Property(t => t.aposentado).HasColumnName("aposentado");
            this.Property(t => t.id_cbor_subgrupo).HasColumnName("id_cbor_subgrupo");
            this.Property(t => t.ocupacao_profissional).HasColumnName("ocupacao_profissional");
            this.Property(t => t.rg_profissional).HasColumnName("rg_profissional");
            this.Property(t => t.orgao_emissor).HasColumnName("orgao_emissor");
            this.Property(t => t.dt_emissao_rg).HasColumnName("dt_emissao_rg");
            this.Property(t => t.uf_rg).HasColumnName("uf_rg");
            this.Property(t => t.id_tipo_certidao).HasColumnName("id_tipo_certidao");
            this.Property(t => t.nome_cartorio).HasColumnName("nome_cartorio");
            this.Property(t => t.livro_certidao).HasColumnName("livro_certidao");
            this.Property(t => t.folha_certidao).HasColumnName("folha_certidao");
            this.Property(t => t.termo_certidao).HasColumnName("termo_certidao");
            this.Property(t => t.dt_emissao_certidao).HasColumnName("dt_emissao_certidao");
            this.Property(t => t.titulo_profissional).HasColumnName("titulo_profissional");
            this.Property(t => t.zona_titulo).HasColumnName("zona_titulo");
            this.Property(t => t.secao_titulo).HasColumnName("secao_titulo");
            this.Property(t => t.email).HasColumnName("email");
            this.Property(t => t.telefone_profissional).HasColumnName("telefone_profissional");
            this.Property(t => t.celular).HasColumnName("celular");
            this.Property(t => t.nome_contato).HasColumnName("nome_contato");
            this.Property(t => t.telefone_contato).HasColumnName("telefone_contato");
            this.Property(t => t.id_parentesco).HasColumnName("id_parentesco");
            this.Property(t => t.cep_profissional).HasColumnName("cep_profissional");
            this.Property(t => t.id_tipo_logradouro).HasColumnName("id_tipo_logradouro");
            this.Property(t => t.rua_profissional).HasColumnName("rua_profissional");
            this.Property(t => t.bairro_profissional).HasColumnName("bairro_profissional");
            this.Property(t => t.cidade_profissional).HasColumnName("cidade_profissional");
            this.Property(t => t.numero_profissional).HasColumnName("numero_profissional");
            this.Property(t => t.complemento_profissional).HasColumnName("complemento_profissional");
            this.Property(t => t.uf_profissional).HasColumnName("uf_profissional");
            this.Property(t => t.outro_endereco_profissional).HasColumnName("outro_endereco_profissional");
            this.Property(t => t.ponto_ref_profissional).HasColumnName("ponto_ref_profissional");
            this.Property(t => t.data_ativacao).HasColumnName("data_ativacao");
            this.Property(t => t.data_bloqueio).HasColumnName("data_bloqueio");

            // Relationships
            this.HasRequired(t => t.setor)
                .WithMany(t => t.ListaProfissionais)
                .HasForeignKey(d => d.id_setor);

        }
    }
}
